// 解题思路：
// 把人分到组，需要把所有情况都考虑到：组里 1 个人，2 个人，3个人...
// 因为有很多个组，这样枚举时间复杂度太高
// 采用正难则反的思路，依次枚举每组最多有多少个人：1 个人， 2个人， 3 个人...
// 很多个组分别能拆分成：m1, m2, m3...
// 只要 m1 + m2 + m3 + ... <= m 即可符合要求
// 优化：
// 采用二分的思路，找出所有声部人最多的声部的人数 max
// left = 1, right = max
// mid = (right - left) / 2 + left
// 如果 mid 能符合要求：right = mid
// 如果不能符合要求：left = mid + 1
// 注意，如果声部的种数多余总组数 m，无法分组，返回 -1

import java.util.*;
import java.io.*;

public class Group {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        // 统计每种声部的数量
        int[] group = new int[n + 1];
        for(int i = 0; i < n; i++){
            int num = in.nextInt();
            group[num]++;
        }
        // 统计不同声部的数量
        int max = 0;
        int count = 0;
        for(int i = 0; i <= n; i++){
            if(group[i] != 0){
                count++;
                max = Math.max(max, group[i]);
            }
        }
        if(n < m || count > m){
            System.out.println(-1);
            return;
        }
        int left = 1;
        int right = max;
        int mid = (right - left) / 2;
        while(left < right){
            if(check(group, mid, m)){
                right = mid;
            }else{
                left = mid + 1;
            }
            mid = (right - left) / 2 + left;
        }
        System.out.println(mid);
    }

    public static boolean check(int[] group, int num, int m){
        int sum = 0;
        for(int i = 0; i < group.length; i++){
            if(group[i] > 0){
                int a = group[i] / num;
                int b = group[i] % num == 0 ? 0 : 1;
                sum += (a + b);
            }
        }
        if(sum <= m) return true;
        else return false;
    }
}
